Column

Histograma: Actitud hacia los demás

Histograma: Opinión Calidad de Vida e Inmigración

Mapa de Calor: Actitud vs. Opinión Calidad de Vida e Inmigración

---
title: "Integración en la UE" 
author: "Alba Nuez Vilà"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    vertical_layout: fill
    social: menu
    source_code: embed
---

```{r setup, include=FALSE}
#Librerías de interés
library(flexdashboard)
library(tidyverse)
library(maps)
library(plotly)
library(shiny)
library(readxl)
library(dplyr)
library(leaflet)
library(lattice)
library(ggplot2)
library(gridExtra)
```

```{r}
#Cargamos la base de datos depurada
df <- read_excel("Depurada_ESS11_subset.xlsx")
#La variable país debe ser un factor
df$cntry <- as.factor(df$cntry)
#Nombre de los países
country_names <- c(
  AL = "Albania", AT = "Austria", BE = "Belgium", BG = "Bulgaria", 
  CH = "Switzerland", CY = "Cyprus", CZ = "Czechia", DE = "Germany", 
  DK = "Denmark", EE = "Estonia", ES = "Spain", FI = "Finland", 
  FR = "France", GB = "United Kingdom", GE = "Georgia", GR = "Greece", 
  HR = "Croatia", HU = "Hungary", IE = "Ireland", IS = "Iceland", 
  IL = "Israel", IT = "Italy", LT = "Lithuania", LU = "Luxembourg", 
  LV = "Latvia", ME = "Montenegro", MK = "North Macedonia", NL = "Netherlands", 
  NO = "Norway", PL = "Poland", PT = "Portugal", RO = "Romania", 
  RS = "Serbia", RU = "Russian Federation", SE = "Sweden", SI = "Slovenia", 
  SK = "Slovakia", TR = "Turkey", UA = "Ukraine", XK = "Kosovo"
)
df$cntry <- factor(df$cntry, levels = names(country_names), labels = country_names)

# Filtrar países con conteos mayores que 0
country_counts <- df %>% group_by(cntry) %>% summarise(count = n())
valid_countries <- country_counts %>% filter(count > 0) %>% pull(cntry)

# Filtrar el dataframe para incluir solo países válidos
df <- df %>% filter(cntry %in% valid_countries)
df$cntry <- droplevels(df$cntry)
```


Column {.sidebar}
-----------------------------------------------------------------------

### Selección de país

```{r}
selectInput('cntry', 'Selecciona un país:', choices = levels(df$cntry), selected = levels(df$cntry)[1])
```

Column {data-width=100}
-----------------------------------------------------------------------

### Histograma: Actitud hacia los demás

```{r}
renderPlot({
  selected_country <- input$cntry
  filtered_df <- df %>% filter(cntry == selected_country)
  
  ggplot(filtered_df, aes(x = factor(actitud_positiva))) +
    geom_bar(fill = "coral1", color = "white") +
    labs(title = "Distribución de Actitud hacia los demás", x = "Actitud", y = "Frecuencia") +
    geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5, size = 3) +
    theme(
      plot.title = element_text(hjust = 0.5),
      panel.background = element_blank(),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      axis.line = element_line(color = "grey"),
      axis.text.x = element_text(angle = 90, hjust = 1, color = "black"),  # Rotate x-axis labels 90 degrees
      axis.text.y = element_text(color = "black"),
      axis.title = element_text(color = "black")
    )
})
```

### Histograma: Opinión Calidad de Vida e Inmigración

```{r}
renderPlot({
  selected_country <- input$cntry
  filtered_df <- df %>% filter(cntry == selected_country)
  
  possible_values_imwbcnt <- seq(min(filtered_df$imwbcnt, na.rm = TRUE), max(filtered_df$imwbcnt, na.rm = TRUE), by = 1)
  
  ggplot(filtered_df, aes(x = imwbcnt)) +
    geom_histogram(binwidth = 1, fill = "coral1", color = "white") +
    labs(title = "Distribución de 'opinión calidad de vida e inmigración'", x = "Impacto en calidad de vida", y = "Frecuencia") +
    geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5, size = 3) +
    scale_x_continuous(breaks = possible_values_imwbcnt) +
    theme(
      plot.title = element_text(hjust = 0.5),
      panel.background = element_blank(),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      axis.line = element_line(color = "grey"),
      axis.text = element_text(color = "black"),
      axis.title = element_text(color = "black")
    )
})
```

### Mapa de Calor: Actitud vs. Opinión Calidad de Vida e Inmigración

```{r}
renderPlot({
  selected_country <- input$cntry
  filtered_df <- df %>% filter(cntry == selected_country)
  
  heatmap_data <- filtered_df %>%
    group_by(actitud_positiva, imwbcnt) %>%
    summarise(count = n()) %>%
    ungroup()
  
  heatmap_matrix <- xtabs(count ~ actitud_positiva + imwbcnt, data = heatmap_data)
  
  levelplot(heatmap_matrix, 
            xlab = "Actitud", 
            ylab = "Opinión inmigración y calidad de vida", 
            col.regions = colorRampPalette(c("white", "coral1")),
            scales = list(x = list(rot = 90)),
            panel = function(...) {
              panel.levelplot(...)
              panel.text(row(heatmap_matrix), col(heatmap_matrix), 
                         labels = heatmap_matrix, cex = 0.8)  # Display absolute counts
            },
            main = "Mapa de calor: Actitud vs opinión immigración y calidad de vida")
})
```